package com.nineclock.system.service.impl;

import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.nineclock.common.constant.NcConstant;
import com.nineclock.common.enums.ResponseEnum;
import com.nineclock.common.exception.NcException;
import com.nineclock.common.utils.BeanHelper;
import com.nineclock.model.dto.SysCompanyContactConfigDTO;
import com.nineclock.model.pojo.SysCompanyContactConfig;
import com.nineclock.system.mapper.SysCompanyContactConfigMapper;
import com.nineclock.system.service.SysCompanyContactConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
@Slf4j
public class SysCompanyContactConfigServiceImpl implements SysCompanyContactConfigService {

    @Autowired
    SysCompanyContactConfigMapper sysCompanyContactConfigMapper;

    /**
     * 添加企业字段
     *
     * @param sysCompanyContactConfigDTO
     */
    @Override
    public void addCompanyContactConfig(SysCompanyContactConfigDTO sysCompanyContactConfigDTO) {
        //判断参数是否为空
        if (sysCompanyContactConfigDTO == null || StrUtil.isEmpty(sysCompanyContactConfigDTO.getName())) {
            //throw new RuntimeException(ResponseEnum.INVALID_PARAM_ERROR.getMessage());
            throw new NcException(ResponseEnum.INVALID_PARAM_ERROR);
        }
        //添加参数
        SysCompanyContactConfig contactConfig = BeanHelper.copyProperties(sysCompanyContactConfigDTO, SysCompanyContactConfig.class);
        //设置默认值
        contactConfig.setStatus((short) 1);
        contactConfig.setCompanyId(1L);
        contactConfig.setFieldType("string");

        //添加到数据库
        sysCompanyContactConfigMapper.insert(contactConfig);
    }

    /**
     * 查看企业通讯录字段接口
     * @return
     */
    @Override
    public List<SysCompanyContactConfigDTO> queryCompanyContactConfig() {
        //设初始值id=1
        Long companyId = 1L;
        //lambda表达式 eq( ) : 等于 = ,代替sql语句 select * from 表名 where id=?;
        LambdaQueryWrapper<SysCompanyContactConfig> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(SysCompanyContactConfig::getCompanyId, companyId);//??输入company_id=1 ,为什么可以查询全部
        //去数据库查询全部数据
        List<SysCompanyContactConfig> sysCompanyContactConfigList = sysCompanyContactConfigMapper.selectList(queryWrapper);
        //判断数据库查询出来的数据是否为空
        if (CollectionUtil.isEmpty(sysCompanyContactConfigList)) {
            //遍历字段,没有就添加
            for (String name : NcConstant.COMPANY_CONFIG_CONTACT_LIST) {
                SysCompanyContactConfig sysCompanyContactConfig = new SysCompanyContactConfig();
                sysCompanyContactConfig.setName(name);
                //添加默认字段
                sysCompanyContactConfig.setCompanyId(companyId);//companyId??? 应该是1L,默认字段
                sysCompanyContactConfig.setFieldType("string");
                sysCompanyContactConfig.setStatus((short) 1);
                sysCompanyContactConfig.setType("fixed");
                //字段添加到数据库
                sysCompanyContactConfigMapper.insert(sysCompanyContactConfig);
                //字段添加到list集合, 在数据库没有数据时, 既可以添加到数据库, 又可以返回已经定于好的数据
                sysCompanyContactConfigList.add(sysCompanyContactConfig);
            }
        }
        //转化为DTO存储数据
        List<SysCompanyContactConfigDTO> sysCompanyContactConfigDTOList = BeanHelper.copyWithCollection(sysCompanyContactConfigList, SysCompanyContactConfigDTO.class);
        return sysCompanyContactConfigDTOList;
    }

    /**
     * 根据id修改企业通讯录字段(状态)接口
     *
     * @param id
     * @param status
     */
    @Override
    public void updateCompanyContactConfigStatus(Long id, Short status) {
        //判断参数是否为空
        if (id==null||status==null) {
            //throw new RuntimeException(ResponseEnum.INVALID_PARAM_ERROR.getMessage());
            throw new NcException(ResponseEnum.INVALID_PARAM_ERROR);
        }
        //根据id查询数据库
        SysCompanyContactConfig sysCompanyContactConfig = sysCompanyContactConfigMapper.selectById(id);
        //判断数据是否为空
        if (sysCompanyContactConfig == null) {
            //throw new RuntimeException(ResponseEnum.DATA_NOT_EXISTS.getMessage());
            throw new NcException(ResponseEnum.DATA_NOT_EXISTS);
        }
        //更新状态
        sysCompanyContactConfig.setStatus(status);
        //修改数据库内容
        sysCompanyContactConfigMapper.updateById(sysCompanyContactConfig);
    }


    /**
     * 根据id删除企业通讯录字段接口
     * @param id
     */
    @Override
    public void deleteCompanyContactConfig(Long id) {
        //判断参数是否为空
        if (id == null) {
            //throw new RuntimeException(ResponseEnum.INVALID_PARAM_ERROR.getMessage());
            throw new NcException(ResponseEnum.INVALID_PARAM_ERROR);
        }
        //根据id查询数据库
        SysCompanyContactConfig sysCompanyContactConfig = sysCompanyContactConfigMapper.selectById(id);
        //判断数据是否为空
        if (sysCompanyContactConfig == null) {
            //throw new RuntimeException(ResponseEnum.DATA_NOT_EXISTS.getMessage());
            throw new NcException(ResponseEnum.DATA_NOT_EXISTS);
        }
        //根据id删除数据库数据
        sysCompanyContactConfigMapper.deleteById(id);
    }


}
